home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / Ang261Lib.lha / src / eat.c < prev    next >
C/C++ Source or Header  |  1994-10-22  |  5KB  |  222 lines

  1. /*
  2.  * eat.c: food code 
  3.  *
  4.  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke 
  5.  *
  6.  * This software may be copied and distributed for educational, research, and
  7.  * not for profit purposes provided that this copyright and statement are
  8.  * included in all such copies. 
  9.  */
  10.  
  11. #include "constant.h"
  12. #include "config.h"
  13. #include "types.h"
  14. #include "externs.h"
  15.  
  16. #ifdef USG
  17. #include <string.h>
  18. #else
  19. #include <strings.h>
  20. #endif
  21.  
  22. /* Eat some food.                    -RAK-     */
  23. void 
  24. eat()
  25. {
  26.     int32u                 i;
  27.     int                    j, k, item_val, ident;
  28.     register struct flags *f_ptr;
  29.     register struct misc  *m_ptr;
  30.     register inven_type   *i_ptr;
  31.  
  32.     free_turn_flag = TRUE;
  33.     if (inven_ctr == 0)
  34.     msg_print("But you are not carrying anything.");
  35.     else if (!find_range(TV_FOOD, TV_NEVER, &j, &k))
  36.     msg_print("You are not carrying any food.");
  37.     else if (get_item(&item_val, "Eat what?", j, k, 0)) {
  38.     i_ptr = &inventory[item_val];
  39.     free_turn_flag = FALSE;
  40.     i = i_ptr->flags;
  41.     ident = FALSE;
  42.     while (i != 0) {
  43.         j = bit_pos(&i) + 1;
  44.     /* Foods                     */
  45.         switch (j) {
  46.           case 1:
  47.         f_ptr = &py.flags;
  48.         if (!f_ptr->poison_resist)
  49.             f_ptr->poisoned += randint(10) + i_ptr->level;
  50.         ident = TRUE;
  51.         break;
  52.           case 2:
  53.         f_ptr = &py.flags;
  54.         if (!py.flags.blindness_resist) {
  55.             f_ptr->blind += randint(250) + 10 * i_ptr->level + 100;
  56.             draw_cave();
  57.             msg_print("A veil of darkness surrounds you.");
  58.             ident = TRUE;
  59.         }
  60.         break;
  61.           case 3:
  62.         if (!py.flags.fear_resist) {
  63.             f_ptr = &py.flags;
  64.             f_ptr->afraid += randint(10) + i_ptr->level;
  65.             msg_print("You feel terrified!");
  66.             ident = TRUE;
  67.         }
  68.         break;
  69.           case 4:
  70.         f_ptr = &py.flags;
  71.         if ((!py.flags.confusion_resist) && (!py.flags.chaos_resist)) {
  72.             f_ptr->confused += randint(10) + i_ptr->level;
  73.             msg_print("You feel drugged.");
  74.         }
  75.         ident = TRUE;
  76.         break;
  77.           case 5:
  78.         f_ptr = &py.flags;
  79.         f_ptr->image += randint(200) + 25 * i_ptr->level + 200;
  80.         msg_print("You feel drugged.");
  81.         ident = TRUE;
  82.         break;
  83.           case 6:
  84.         ident = cure_poison();
  85.         break;
  86.           case 7:
  87.         ident = cure_blindness();
  88.         break;
  89.           case 8:
  90.         f_ptr = &py.flags;
  91.         if (f_ptr->afraid > 1) {
  92.             f_ptr->afraid = 1;
  93.             ident = TRUE;
  94.         }
  95.         break;
  96.           case 9:
  97.         ident = cure_confusion();
  98.         break;
  99.           case 10:
  100.         ident = TRUE;
  101.         lose_str();
  102.         break;
  103.           case 11:
  104.         ident = TRUE;
  105.         lose_con();
  106.         break;
  107. #if 0                   /* 12 through 15 are not used */
  108.           case 12:
  109.         ident = TRUE;
  110.         lose_int();
  111.         break;
  112.           case 13:
  113.         ident = TRUE;
  114.         lose_wis();
  115.         break;
  116.           case 14:
  117.         ident = TRUE;
  118.         lose_dex();
  119.         break;
  120.           case 15:
  121.         ident = TRUE;
  122.         lose_chr();
  123.         break;
  124. #endif
  125.           case 16:
  126.         if (res_stat(A_STR)) {
  127.             msg_print("You feel your strength returning.");
  128.             ident = TRUE;
  129.         }
  130.         break;
  131.           case 17:
  132.         if (res_stat(A_CON)) {
  133.             msg_print("You feel your health returning.");
  134.             ident = TRUE;
  135.         }
  136.         break;
  137.           case 18:
  138.         if (res_stat(A_INT)) {
  139.             msg_print("Your head spins a moment.");
  140.             ident = TRUE;
  141.         }
  142.         break;
  143.           case 19:
  144.         if (res_stat(A_WIS)) {
  145.             msg_print("You feel your wisdom returning.");
  146.             ident = TRUE;
  147.         }
  148.         break;
  149.           case 20:
  150.         if (res_stat(A_DEX)) {
  151.             msg_print("You feel more dextrous.");
  152.             ident = TRUE;
  153.         }
  154.         break;
  155.           case 21:
  156.         if (res_stat(A_CHR)) {
  157.             msg_print("Your skin stops itching.");
  158.             ident = TRUE;
  159.         }
  160.         break;
  161.           case 22:
  162.         ident = hp_player(randint(6));
  163.         break;
  164.           case 23:
  165.         ident = hp_player(randint(12));
  166.         break;
  167.           case 24:
  168.         ident = hp_player(randint(18));
  169.         break;
  170. #if 0                   /* 25 is not used */
  171.           case 25:
  172.         ident = hp_player(damroll(3, 6));
  173.         break;
  174. #endif
  175.           case 26:
  176.         ident = hp_player(damroll(3, 12));
  177.         break;
  178.           case 27:
  179.         take_hit(randint(18), "poisonous food.");
  180.         ident = TRUE;
  181.         break;
  182. #if 0                   /* 28 through 30 are not used */
  183.           case 28:
  184.         take_hit(randint(8), "poisonous food.");
  185.         ident = TRUE;
  186.         break;
  187.           case 29:
  188.         take_hit(damroll(2, 8), "poisonous food.");
  189.         ident = TRUE;
  190.         break;
  191.           case 30:
  192.         take_hit(damroll(3, 8), "poisonous food.");
  193.         ident = TRUE;
  194.         break;
  195. #endif
  196.           default:
  197.         msg_print("Internal error in eat()");
  198.         break;
  199.         }
  200.     /* End of food actions.                 */
  201.     }
  202.     if (ident) {
  203.         if (!known1_p(i_ptr)) {
  204.         /* use identified it, gain experience */
  205.         m_ptr = &py.misc;
  206.         /* round half-way case up */
  207.         m_ptr->exp += (i_ptr->level + (m_ptr->lev >> 1)) / m_ptr->lev;
  208.         prt_experience();
  209.  
  210.         identify(&item_val);
  211.         i_ptr = &inventory[item_val];
  212.         }
  213.     } else if (!known1_p(i_ptr))
  214.         sample(i_ptr);
  215.     add_food(i_ptr->p1);
  216.     py.flags.status &= ~(PY_WEAK | PY_HUNGRY);
  217.     prt_hunger();
  218.     desc_remain(item_val);
  219.     inven_destroy(item_val);
  220.     }
  221. }
  222.